透视检查应用程序并为迁移到 Oracle Solaris 11 作好准备

2011 年 11 月

作者:Stefan Schneider

如何使用 Oracle 提供的标准流程和工具将现有 Oracle Solaris 10 应用程序迁移到 Oracle Solaris 11。


为什么要测试应用程序?

Oracle Solaris 二进制兼容性保证担保在 Oracle Solaris 10 上开发的应用程序将可以在 Oracle Solaris 11 上正常运行,只要这些程序依赖于公共、稳定的编程 API。

OTN 旨在帮助您充分熟悉 Oracle 技术以便作出明智的决策。提供文章、软件下载、文档等。立即加入以获取完成工作所需的技术资源。

不过,能够在 Oracle Solaris 11 上执行组织良好的 Oracle Solaris 10 应用程序并不足以保证高质量的用户体验。Oracle Solaris 11 吸收了 6 年的技术发展,因而,这些应用程序出于以下原因可能需要一些配置更改:

  • 应用程序框架以更新的版本(如 GNOME)来提供。
  • 一些框架已被其他框架所取代。例如,lpdcups 取代。
  • Oracle Solaris 10 中的私有和不稳定的 API 在 Oracle Solaris 11 中可能已被删除。例如,在 Oracle Solaris 9 中静态链接的应用程序有时在 Oracle Solaris 10 中可以正常运行。但在 Oracle Solaris 11 中它们不可能正常运行。
  • 命令的位置变了。例如,/usr/ucb/whoami 现在位于 /usr/bin/whoami 中。
  • 弃用的、非 ISO 兼容区域设置已被删除。

这些更改都不会影响实现良好的 Oracle Solaris 10 应用程序。不过,未遵循 Oracle Solaris 10 编码和操作标准的应用程序可能需要对配置进行一些更改。

迁移过程概述

如图 1 所示,Oracle 正在通过一组工具和一个采用指南来促进向 Oracle Solaris 11 进行迁移,这里的采用指南可以用于制定 Oracle Solaris 11 迁移计划。

图 1

图 1. 迁移过程概述

为确保在应用程序到 Oracle Solaris 11 的迁移过程中进行良好的管理,首先您应查阅 Oracle Solaris 11 ISV 采用指南。该指南提供了不良设计 Oracle Solaris 10 应用程序可能在 Oracle Solaris 11 中出现问题的常见原因清单,它列出了可能在 Oracle Solaris 11 中造成问题的所有当前已知边缘情况。

此外,Oracle Solaris 11 特性终止 (EOF) 声明页面还列出了 Oracle Solaris 11 上不再支持的弃用软件框架和老旧硬件。该页面可用作附加清单来确定 Oracle Solaris 10 应用程序在 Oracle Solaris 11 上可能产生的潜在问题。

Oracle Solaris Preflight Applications Checker

应用程序通常包含许多子组件和第三方组件。您可以使用上一节中提到的资源来评估应用程序的技术就绪状况。不过,评估第三方运行时组件的就绪状况可能会更加困难。

Oracle Solaris Preflight Applications Checker 可为您生成一些 HTML 报告,这些报告可用作合格“任务”列表,以便您能够确定 Oracle Solaris 10 应用程序对于 Oracle Solaris 11 的就绪状况。拥有此类列表可以降低成本,因为通过解决所报告的问题而不是依赖于初始 QA 运行来了解底层问题可节省宝贵的 QA 时间和根本原因分析时间。

Oracle Solaris Preflight Applications Checker 附带三个不同的组件,如图 2 所示:

  • Binary Analyzer,它扫描应用程序二进制文件
  • Source Code Analyzer,它可以扫描应用程序源代码和脚本
  • RunTime Analyzer,它可以监视运行中的应用程序是否有任何可能在 Oracle Solaris 11 中产生问题的调用或文件访问操作
图 2

图 2. Oracle Solaris Preflight Applications Checker 的组件

Binary Analyzer

Oracle Solaris 中所有接口的版本可确保向上兼容,这些接口被标记为 publicprivate。公共接口可被 Oracle Solaris 上运行的应用程序或中间件所使用,而私有接口只可被其他 Oracle Solaris 接口所使用。

尽管大多数二进制不兼容性问题情况是由于使用私有符号而导致的,但有些问题可能是因为不稳定的实现。不稳定的实现包括在编译时将 Oracle Solaris 共享对象以静态方式链接到应用程序,因为 Oracle Solaris 接口可能会随时间而变化。随着接口发生变化,静态链接的共享对象与其他 Oracle Solaris 库之间的交互也存在二进制不兼容性的风险。因此,在兼容性检查阶段,当在对象的配置文件中记录有静态链接时,兼容性检查工具会将此情况报告为危险。此外,也可以使用试探的办法通过查看特定符号来检查部分静态链接。

在二进制文件扫描的初始阶段,将提取应用程序所使用的所有绑定和关联符号。兼容性检查工具使用用户提供的应用程序环境变量 LD_LIBRARY_PATH 来确定应用程序在运行时所使用的库。然后对此信息进行分析以确定被检查对象的路径名称以及到 Oracle Solaris 共享库的符号绑定。在该分析阶段使用的另一个实用程序是 elfdump 命令,该命令转储对象所依赖的动态链接信息。

Source Code Analyzer

静态源代码分析模块可以检查 C/C++ 源代码、K shell 和其他 shell 脚本中的兼容性问题。此模块主要检查对已删除、重命名、修改或弃用的 Oracle Solaris 库函数和 shell 命令的使用情况。

RunTime Analyzer

运行时分析模块可以在一个现有 Oracle Solaris 10 测试环境中运行并报告潜在的兼容性问题。该工具的这一模块使用 DTrace 来调查进程详细信息,它可能调用 Oracle Solaris 10 上可用的其他系统工具(如果需要)。

该工具可以配置成以不同的检查范围来运行:从系统范围检查到仅特定进程的检查。

RunTime Analyzer 工具可以报告以下情况的已知问题:

  • 调用已弃用的 (EOL) 命令
  • 调用重命名或重新定位的命令
  • 调用具有已弃用选项的命令
  • 打开、读取或写入已弃用、重命名或重新定位的文件或设备
  • 使用过时或已删除版本的实用程序或程序包,如使用 postgreSQL 的硬编码路径
  • 使用已删除或已被取代的设备驱动程序接口
  • 使用或调用已弃用或“生命周期终止”(EOL) 的函数、API、或符号
  • 使用或调用私有接口
  • 动态加载已弃用或重命名的库

总结

对大多数应用程序而言,扫描工具不会报告任何问题,它们很可能不会面对“Oracle Solaris 11 ISV 采用指南”或 Oracle Solaris 11 EOF 页面中讨论的问题。因此,大多数应用程序很可能可以在 Oracle Solaris 11 上直接运行。但是,有些应用程序会报告问题,因为它们使用过时和已弃用的框架和 API。这些应用程序需要修复。

Oracle Solaris 11 Preflight Applications Checker 和“Oracle Solaris 11 ISV 采用指南”能够帮助您做出可以减轻所报告问题的决策。例如,您可能决定使用 Oracle p2v(物理到虚拟)或 v2v(虚拟到虚拟)工具将应用程序从 Oracle Solaris 10 迁移到在 Oracle Solaris 11 上以 Oracle Solaris 10 模式运行的 Oracle Solaris 10 区域。

更多信息

下面是其他一些资源:

修订版 1.0,2011 年 11 月 2 日